作業目的:檢視近期成立公司與解散公司的數量與資本總額, 來驗證台灣是否在投資擴張或緊縮
In [445]:
    
import pandas as pd
#讀取CSV 資料來源開放政府 公司設立登記清冊(201610) http://data.gov.tw/node/6047
#讀取CSV 
df1 = pd.read_csv("公司設立登記清冊201610.csv",encoding="utf8") 
df1[:5]
    
    Out[445]:
In [446]:
    
# 公司解散登記清冊(201610) http://data.gov.tw/node/6049
df2 = pd.read_csv("公司解散登記清冊201610.csv",encoding="utf8")
df2[:5]
    
    Out[446]:
資料預處理(清理、轉換、JOIN):
In [447]:
    
#清理NaN, 將上述設立公司csv檔中未有代表人,資本額的做清除動作
df1 = df1[df1['代表人'].notnull()]
df1 = df1[df1['資本額'].notnull()]
del df1['代表人'] #移除代表人欄位
df1[:5]
    
    Out[447]:
In [448]:
    
#解散公司資料多數未列上代表人, 儘清除資本額
df2 = df2[df2['資本額'].notnull()]
del df2['代表人']
df2[:5]
    
    Out[448]:
資料預處理:轉換,將公司所在地&資本額做分組所在地取出前面的縣市資訊取出做後續分佈判讀
In [449]:
    
#先將DataFrame取出所在地、資本額做後續分群使用
df1_loc=df1['公司所在地'].map(lambda x: str(x)[0:3])
#新增欄到設立公司的dataframe中
df1['所在地']=df1_loc
df1[:5]
    
    Out[449]:
In [450]:
    
df2_loc=df2['公司所在地'].map(lambda x: str(x)[0:3])  #將所在地新增放入dataframe
df2['所在地']=df2_loc
df2[:5]
    
    Out[450]:
In [451]:
    
df2.corr()
    
    Out[451]:
In [452]:
    
#先將DataFrame取出資本額做後續統計使用
df1_cap=df1['資本額']
df1_cap[:5]
    
    Out[452]:
In [453]:
    
df2_cap=df2['資本額']  #解散公司的資本額
df2_cap[:5]
    
    Out[453]:
投資活動在資本擴張或是緊縮? (設立公司資本額 - 解散公司資本額 )
In [454]:
    
sum_row1=df1[["資本額"]].sum() #設立公司總資本額
sum_row2=df2[["資本額"]].sum() #解散公司總資本額
x = sum_row1-sum_row2   #設立公司的總資本額 - 解散公司的總資本額 (正為投資擴張, 負為投資緊縮)
x
    
    Out[454]:
透過JOIN: 檢查df1, df2,看有無同時解散又成立公司的條件存在,以避免來源資料有重複key-in
In [455]:
    
df3 = pd.merge(df1,df2,left_on='統一編號',right_on='統一編號',how='inner')
df3[:5]
    
    Out[455]:
使⽤樞紐分析表來察看哪些地方有較多的公司設立活動
In [476]:
    
#新增資料年月到dataframe
df1['年月']=df1['核准設立日期'].map(lambda x: str(x)[0:5])
#利用Pivot Table來檢視看各縣市設立公司的資本總額
df1_pivot = df1.pivot_table(values='資本額',index=['年月'],columns='所在地',aggfunc='sum')
df1_pivot.T #存在df1_pivot並轉置pivot table以便閱讀
df1_sorted = df1_pivot.T.sort_values(['10510'],ascending=False) #排序從投資最多的城市到投資最低的
df1_sorted[:5]
    
    Out[476]:
In [477]:
    
df2['年月']=df1['核准設立日期'].map(lambda x: str(x)[0:5])
#利用Pivot Table來檢視看各縣市解散公司的資本總額
df2_pivot=df2.pivot_table(values='資本額',index=['年月'],columns='所在地',aggfunc='sum')
df2_sorted = df2_pivot.T.sort_values(['10510'],ascending=False) #排序從投資最多的城市到投資最低的
df2_sorted[:5]
    
    Out[477]:
資料分析方法擇二: 統計分析、相關性分析 (統計分析、相關性分析、購物籃分析、時間序列分析、主次因素分析)
In [458]:
    
df1_cap.describe() #描述性統計描述設立公司現況
    
    Out[458]:
In [459]:
    
df2_cap.describe()  #描述性統計描述解散公司的資本額
    
    Out[459]:
In [460]:
    
df1_cap = df1_cap.rename(columns = {'資本額','設立公司資本額'})
df2_cap = df2_cap.rename(columns = {'資本額','解散公司資本額'})
    
In [461]:
    
result = pd.concat([df1_cap, df2_cap], axis=1) #左側為設立公司資本額、右側為解散公司資本額
result[:5]
    
    Out[461]:
In [462]:
    
import matplotlib.pyplot as plt  
import numpy as np
plt.style.use('ggplot')
print (df1_cap.max(),df1_cap.min())
r = plt.boxplot(df1_cap, showfliers=False) #透過箱型圖來檢視設立公司資本額分佈
plt.show()
    
    
    
In [463]:
    
df1.corr()   #相關性分析來看設立公司資料,檢視統一編號有無跟什麼有相關?
    
    Out[463]:
In [464]:
    
df2.corr()  #相關性分析來看解散公司資料
    
    Out[464]:
In [465]:
    
plt.rcParams['axes.unicode_minus']=False 
df1.plot(kind='scatter',title='ID v.s. #',figsize=(6,4),x='統一編號',y='序號',marker='+')
    
    Out[465]:
    
In [466]:
    
print (df2_cap.max(),df2_cap.min())
plt.boxplot(df2_cap, showfliers=False) #透過箱型圖來檢視解散公司資本額分佈
plt.show()
    
    
    
視覺化擇二: Matplotlib做圖_直方圖、折線圖
In [467]:
    
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.style.use('ggplot')
#pandas作圖不使用plt.show(),若要顯示在Jupyter Notebook上,需先執行以下程式碼:(%是在ipython shell中執行command line的意思)
%matplotlib inline
plt.rcParams['font.family']='Simhei' #顯示中文
#對設立公司的資本額做分群, 台灣徵信對於中小型企業有3000萬為一個徵信門檻,經濟部則是製造業、營造業、礦業及土石採取業實收資本額在新臺幣八千萬元以下
bins = [0,300000,8000000,10000000]
pd.cut(df1['資本額'],bins, right=False)
labels = ['C','B','A']
df1['資本規模'] = pd.cut(df1['資本額'],bins, right=False, labels=labels)
df1[:5]
    
    Out[467]:
In [468]:
    
#利用Pivot Table來檢視資本規模
df1_scale=df1.pivot_table(values='資本額',index=['年月'],columns='資本規模',aggfunc='sum')
df1_scale
    
    Out[468]:
In [469]:
    
df1_counts = df1.groupby('資本規模').size() #計數總共有幾間設立公司,分屬A(大),B(中),C(小)企業
df1_counts
    
    Out[469]:
Matplotlib 多圖合一 , 將大型企業、中型企業、小型企業總額與個數同時做圖. 目的在了解台灣設立公司中,中小型企業與大型企業在數量上與貢獻的總資本額的差異
In [470]:
    
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.figure(figsize=(6,6))
x = [1,2,3]  #3表示大型; 2表中型; 1表小型企業
y1 = [81536556,190705000,16800000] 
y2 = [673,2560,25]
ax1 = plt.subplot(211) #2x1的第1張圖
plt.plot(x,y1,'-')
plt.setp(ax1.get_xticklabels(), visible=False) #不顯示x軸ticks
plt.subplot(212,sharex=ax1) #2x1的第2張圖
plt.bar(x,y2,align='center')
plt.show()
    
    
In [471]:
    
#同樣對解散公司的資本額做分群與做圖
bins_dismiss = [0,300000,8000000,10000000]
pd.cut(df2['資本額'],bins, right=False)
labels = ['C','B','A']
df2['資本規模'] = pd.cut(df2['資本額'],bins, right=False, labels=labels)
df2[:5]
    
    Out[471]:
In [472]:
    
#利用Pivot Table來檢視資本規模
df2_scale=df2.pivot_table(values='資本額',index=['年月'],columns='資本規模',aggfunc='sum')
df2_scale
    
    Out[472]:
In [473]:
    
df2_counts = df2.groupby('資本規模').size() #計數總共有幾間設立公司,分屬A(大),B(中),C(小)企業
df2_counts
    
    Out[473]:
In [474]:
    
plt.figure(figsize=(6,6))
x = [1,2,3]  #3表示大型; 2表中型; 1表小型企業
y1 = [21418200,2342356819,175590120] 
y2 = [166,1209,25]
ax1 = plt.subplot(211) #2x1的第1張圖
plt.plot(x,y1,'-')
plt.setp(ax1.get_xticklabels(), visible=False) #不顯示x軸ticks
plt.subplot(212,sharex=ax1) #2x1的第2張圖
plt.bar(x,y2,align='center')
plt.show()
    
    
基礎機器學習擇一:(線性回歸、Logistic迴歸與評估、決策分類樹與評估、K-means分群與視覺化)